import { makeAutoObservable, runInAction } from 'mobx';

import axios from '../utils/axios';

class Menu {

    // 菜单列表数据
    menuList = [];
    constructor() {
        // 代理实例对象
        makeAutoObservable(this);
    }

    // 获取菜单列表
    async getMenuList() {
        const res = await axios.get('/menuList', {
            params: { istree: 1 }
        });
        // 为了让赋值操作是发生在action方法的内部,  否则mobx会报一个警告
        runInAction(() => {
            if (res.code === 200) {
                this.menuList = res.data;
                this.menuList.unshift({
                    id: 0,
                    title: '顶级菜单'
                });
            }
        })
    }

    // 删除菜单
    async menuRemove(id) {
        const res = await axios.delete('/menuRemove', {
            params: {
                id
            }
        });
        if (res.code === 200) {
            // 重新请求菜单列表
            this.getMenuList();
        }
        return res;
    }

    // 更新菜单数据
    async menuUpdate(menuData) {
        const res = await axios.post('/menuUpdate', menuData);
        if (res.code === 200) {
            // 重新请求菜单列表
            this.getMenuList();
        }
        return res;
    }

}

export default new Menu();